# given a package with a $name.desktop file, makes a copy
# as autostart item.

{ stdenv, lib }:
{
  name, # name of the desktop file (without .desktop)
  package, # package where the desktop file resides in
  srcPrefix ? "", # additional prefix that the desktop file may have in the 'package'
  after ? null,
  condition ? null,
  phase ? "2",
  prependExtraArgs ? [ ],
  appendExtraArgs ? [ ],
}:

# the builder requires that
#   $package/share/applications/$name.desktop
# exists as file.

stdenv.mkDerivation {
  name = "autostart-${name}";
  priority = 5;

  buildCommand =
    let
      escapeArgs = args: lib.escapeRegex (lib.escapeShellArgs args);
      prependArgs = lib.optionalString (prependExtraArgs != [ ]) "${escapeArgs prependExtraArgs} ";
      appendArgs = lib.optionalString (appendExtraArgs != [ ]) " ${escapeArgs appendExtraArgs}";
    in
    ''
      mkdir -p $out/etc/xdg/autostart
      target=${name}.desktop
      cp ${package}/share/applications/${srcPrefix}${name}.desktop $target
      ${lib.optionalString (prependExtraArgs != [ ] || appendExtraArgs != [ ]) ''
        sed -i -r "s/(Exec=)([^ \n]*) *(.*)/\1\2 ${prependArgs}\3${appendArgs}/" $target
      ''}
      chmod +rw $target
      echo "X-KDE-autostart-phase=${phase}" >> $target
      ${lib.optionalString (after != null) ''echo "${after}" >> $target''}
      ${lib.optionalString (condition != null) ''echo "${condition}" >> $target''}
      cp $target $out/etc/xdg/autostart
    '';

  # this will automatically put 'package' in the environment when you
  # put its startup item in there.
  propagatedBuildInputs = [ package ];
}
